Integrated circuits often contain memory controllers for interfacing with memory. In a typical system, an integrated circuit can be used to communicate with system memory. In particular, the integrated circuit includes a memory controller that serves as an interface between the integrated circuit and system memory. The integrated circuit also includes processing modules configured to access system memory by sending memory access requests to the memory controller (i.e., the memory controller includes multiple ports each of which receives memory access requests from a respective processing module within the integrated circuit).
Conventional system memory can only be configured to fulfill a limited number of memory access requests within a given time. For example, consider a scenario in which the memory controller receives 12 memory access requests but system memory can only fulfill eight memory access requests within a given number of clock cycles. The memory controller includes a scheduler that receives the 12 memory access requests and that is used to rearrange the order of the memory access requests so that more urgent memory access requests are forwarded to system memory before less urgent memory access requests.